// g++ -o my_memcpy my_memcpy.cc
#include <assert.h>
#include <string.h>
char* my_memcpy(char* dst, const char* src, int cnt) {
  assert(dst && src);
  char* ret = dst;
  if (dst >= src && dst <= src + cnt - 1) {
    dst += cnt - 1;
    src += cnt - 1;
    while (cnt--) *(dst--) = *(src--);
  } else {
    while (cnt--) *(dst++) = *(src++);
  }
  return ret;
}
char* my_strcpy(char* dst, const char* src) {
  assert(dst && src);
  char* ret = dst;
  // int len = sizeof(src);
  dst = my_memcpy(dst, src, strlen(src) + 1);  // *****
  return dst;
}
// 目的字符串长度必须大于源字符串的长度,不然会出现内存溢出。

#include <iostream>
using namespace std;
int main() {
  char s[10] = "hello";  // 栈区，可读可改
  my_strcpy(s, s + 1);
  printf("%s", s);
  // bus error! 为什么字符数组可以而字符串不行？
  //   char* a = "leiyfdsx";  // 静态区，只可读不可改！
  //   const char* b = "helo";
  //   cout << strlen(b) + 1 << endl;
  //   my_strcpy(a, b);
  //   printf("%s", a);
  return 0;
}